<?php
/**
 * Implementa��o do padr�o DAO para a classe Servidor.
 * Essas fun��es n�o devem ser chamadas diretamente, sendo seu uso feito via a classe Servidor.
*/

//if( !function_exists('__autoload') )
//{
//    function __autoload($class_name) {
//    require_once $class_name . '.php';
//    }
//}
require_once 'Servidor.php';
class ServidorDAO
{

      private $database;

      public function __construct()
      {
               $this->database = DataAccess::getConnection();
      }

      public function ObterCampus( $servidor )
      {
            $id = $servidor->id;
             
            $consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{
            	$consulta =  $this->database->Fetch("SELECT un.* FROM t_campus un, t_usuario u, t_setor s WHERE u.t_setor_id = s.id AND s.t_campus_id = un.id AND u.id = '$id' ");
             
             	if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0 )
             	{
                	$rows = $this->database->getRow();

                 	$idCampus = $rows[0]['id'];
                 	$nome = $rows[0]['nome'];
                 	$responsavel = $rows[0]['responsavel'];

                 	$campus = new Campus( $idCampus, $nome, $responsavel );

    				if( $consulta )
            		{
            			$consulta = $this->database->Fetch("COMMIT");
            			return $campus;
            		}
            		else
            		{
           				$consulta = $this->database->Fetch("ROLLBACK");
            			return FALSE;
            		}
             	}
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		}
      }

      /**
      Insere um registro de servidor na tabela t_usuario.
      @servidor - Objeto do tipo Servidor com as informa��es que ser�o gravadas no banco de dados
      @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio.
      */
      public function Salvar( $servidor )
      {
      		$consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{   
      			$usuario = $servidor->usuario;
               	$senha = $servidor->senha;
               	$setor = $servidor->setor;
               	$perfil = $servidor->perfil;
               	$cpf = $servidor->cpf;
               	$siape = $servidor->siape;
               	$resultado = $this->database->Fetch("INSERT INTO t_usuario(t_setor_id, usuario, senha, cpf, siape)
                                	 				VALUES ('$setor->id', '$usuario', '$senha', '$cpf', '$siape')");
               	$servidorId = DataAccess::getId();// id do servidor que foi inserido agora
               	$consulta = $this->database->Fetch("INSERT INTO t_perfil(t_usuario_id, tipo) VALUES('$servidorId', '$perfil')");
    			
               	if( $consulta )
            	{
            		$consulta = $this->database->Fetch("COMMIT");
            		return TRUE;
           		}
           		else
           		{
        			$consulta = $this->database->Fetch("ROLLBACK");
           			return FALSE;
           		}
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		}
      }

      /**
      Altera um registro de servidor na tabela t_usuario.
      @servidor - Objeto do tipo Servidor com as informa��es que ser�o alteradas no banco de dados.
      @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio.
      */
      public function Atualizar( $servidor )
      {
      		$consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{
            	$usuario = $servidor->usuario;
              	$senha = $servidor->senha;
               	$cpf = $servidor->cpf;
               	$siape = $servidor->siape;
               
               	$perfil = $servidor->perfil;
               
               	$id = $servidor->id; // chave-prim�ria do servidor cadastrado no banco de dados

               	$consulta = $this->database->fetch(" UPDATE t_usuario SET senha='$senha', cpf='$cpf', siape='$siape'
                                                     WHERE ID = '$servidor->id' ");
                                                     
               	$consulta1 = $this->database->fetch(" UPDATE t_usuario u, t_perfil p SET tipo='$perfil' where u.id = '$servidor->id' and p.t_usuario_id = u.id ");

    		   	if( $consulta )
            	{
            		$consulta = $this->database->Fetch("COMMIT");
            		return TRUE;
           		}
           		else
           		{
        			$consulta = $this->database->Fetch("ROLLBACK");
           			return FALSE;
           		}
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		}
      }

      /**
      Exclui o registro da tabela t_usuario de chave-prim�ria $id.
      @id - Chave-prim�ria do servidor cadastrado no banco de dados.
      @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio.
      */
      public function Deletar( $id )
      {
      		$consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{   
      			$consulta = $this->database->Fetch(" DELETE FROM t_usuario WHERE id='$id' ");

    		   	if( $consulta )
            	{
            		$consulta = $this->database->Fetch("COMMIT");
            		return TRUE;
           		}
           		else
           		{
        			$consulta = $this->database->Fetch("ROLLBACK");
           			return FALSE;
           		}
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		}
      }
      
      public function ArrayParaservidor( $array )
      {
             $objetos = array();
             
             for( $i = 0; $i < count($array); $i++ )
             {

             $servidor = new servidor();
             $servidor->id = $array[$i]['id'];
             $setor = new Setor();
             $servidor->setor = $setor->CarregarSetor( $array[$i]['t_setor_id'] );
             $servidor->usuario = $array[$i]['usuario'];
             $servidor->senha = $array[$i]['senha'];
             $servidor->perfil = $array[$i]['tipo'];
             $servidor->cpf = $array[$i]['cpf'];
             $servidor->siape = $array[$i]['siape'];
             
             $objetos[] = $servidor;
             }

             return $objetos;
      }
      
      /**
      Busca na tabela t_usuario pelo registro associado � chave-prim�ria $id.
      @id - Chave-prim�ria do servidor cadastrado no banco de dados.
      @return - Retorna um objeto servidor com as informa��es encontradas no registro. Caso n�o encontre nenhum registro retorna FALSE.
      */
      public function Carregarservidor( $id )
      {
              
               $consulta = $this->database->Fetch(" SELECT u.*, p.tipo FROM t_usuario u, t_perfil p WHERE u.id = '$id' AND u.id = p.t_usuario_id ");

               if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0 )
               {
               	                                     
                   $rows = $this->database->getRow();
                   $servidor = $this->ArrayParaservidor( $rows );

                   return $servidor[0];
               }
               else if( mysql_num_rows( $consulta ) == 0 )
               {
                   return FALSE;
               }
      }
      
      /**
      Busca na tabela t_usuario pelo registro associado � chave-prim�ria $id.
      @id - Chave-prim�ria do servidor cadastrado no banco de dados.
      @return - Retorna um objeto servidor com as informa��es encontradas no registro. Caso n�o encontre nenhum registro retorna FALSE.
      */
      public function CarregarServidorPorUsuario( $usuario )
      {
              
               $consulta = $this->database->Fetch(" SELECT u.*, p.tipo FROM t_usuario u, t_perfil p WHERE u.usuario = '$usuario' AND u.id = p.t_usuario_id ");

               if( $consulta != FALSE and mysql_num_rows( $consulta ) > 0 )
               {
               	                                     
                   $rows = $this->database->getRow();
                   $servidor = $this->ArrayParaservidor( $rows );

                   return $servidor[0];
               }
               else if( mysql_num_rows( $consulta ) == 0 )
               {
                   return FALSE;
               }
      }
      
      /**
      Retorna todos os registros da tabela t_usuario.
      @return - Retorna um array de objetos do tipo Servidor. Caso n�o encontre nenhum registro retorna FALSE.
      */
      public function CarregarTodos()
      {
               $consulta = $this->database->Fetch(" SELECT u.*, p.tipo FROM t_usuario u, t_perfil p WHERE u.id = p.t_usuario_id  ");
               
               if ( $consulta != FALSE and mysql_num_rows( $consulta ) > 0)
               {
                  $rows = $this->database->getRow();

                  $objetos = $this->ArrayParaservidor( $rows );

                  return $objetos;
               }
               else if( mysql_num_rows( $consulta ) == 0 )
               {
                  return FALSE;
               }
      }
      
      /**
      Retorna todos os registros da tabela t_usuario que possuam estejam v�nculadas ao setor de chave-extrangeira $setorId.
      Para cada registro encontrado ser� criada uma inst�ncia de Servidor com os valores das colunas do registro em quest�o.
      Por fim, caso sejam encontrados registros, todas as inst�ncias criadas ser�o inseridas dentro de um array que ser� retornado por este m�todo.
      Caso contr�rio, ser� retornado FALSE indicando que n�o foi encontrado nenhum registro.
      @setorId - Chave-extrangeira da tabela t_setor ao qual o servidor est� associado.
      @return - Retorna um array de objetos do tipo Servidor. Caso n�o encontre nenhum registro retorna FALSE.
      */
      public function CarregarPorSetor( $setorId )
      {
             $consulta = $this->database->Fetch(" SELECT u.*, p.tipo FROM t_usuario u, t_perfil p WHERE u.id = p.t_usuario_id AND t_setor_id = '$setorId' ");

               if ( $consulta != FALSE )
               {

                  $rows = $this->database->getRow();

                  $objetos = $this->ArrayParaservidor( $rows );

                  return $objetos;
               }
               else if( mysql_num_rows( $consulta ) == 0 )
               {
                  return FALSE;
               }

      }

      public function CarregarPorUnidade( $campusId )
      {
             $consulta = $this->database->Fetch("SELECT s . * , c.t_campus_id ,p.tipo FROM t_usuario s, t_setor c , t_perfil p
												WHERE c.t_campus_id = $campusId
												AND s.t_setor_id = c.id AND s.id = p.t_usuario_id");

               if ( $consulta != FALSE )
               {

                  $rows = $this->database->getRow();

                  $objetos = $this->ArrayParaservidor( $rows );

                  return $objetos;
               }
               else if( mysql_num_rows( $consulta ) == 0 )
               {
                  return FALSE;
               }

      }
      
      /**
      Valida a entrada do servidor no sistema. Verifica se $usuario e $senha est�o cadastradas no banco de dados e se coincidem.
      @usuario - Usu�rio do servidor cadastrado no banco de dados.
      @senha - Senha cadastrada para o usu�rio no banco de dados.
      @return - Caso a valida��o seja verdadeira, retorna a chave-prim�ria do Servidor no banco de dados. Caso contr�rio retorna FALSE.
      */
      public function Login( $usuario, $senha )
      {

               $consulta = $this->database->Fetch("SELECT u.*, p.tipo FROM t_usuario u, t_perfil p WHERE u.usuario = '$usuario' AND u.senha = '$senha' AND u.id = p.t_usuario_id ");

               if( mysql_num_rows( $consulta ) == 0 )
               {
                   return FALSE;
               }
               else if( $consulta != FALSE )
               {
                   $rows = $this->database->getRow();
					
                   $servidor = new servidor();
                   $servidor->id = $rows[0]['id'];
                   $setor = new Setor();
                   $servidor->setor = $setor->CarregarSetor( $rows[0]['t_setor_id'] );
                   $servidor->usuario = $rows[0]['usuario'];
                   $servidor->senha = $rows[0]['senha'];
                   $servidor->perfil = $rows[0]['tipo'];
                   
                   return $servidor;
               }
      }
}
?>
